通过 HTTP 和 Node-RED 进行配方切换
本教程演示如何使用简单的 HTTP 请求远程切换 OV20i 摄像头上的配方。您将构建一个系统,使网络上的任何设备都能即时切换不同的检测设置——非常适合多产品生产线。
您将构建的内容: 一个响应来自平板电脑、计算机、PLC 或任何能发送网络请求设备的 HTTP 命令的远程配方切换系统。
预计时间: 15-20 分钟
技能水平: 初学者
真实示例: 想象操作员在平板上扫描条码,摄像头自动切换到该产品对应的配方——这正是我们要构建的功能!
为什么 HTTP 配方切换让工作更轻松
OV20i 使远程配方切换变得简单:
- 任何设备都能触发——平板、PLC、计算机,甚至智能手机
- 瞬时切换——配方切换时间不到一秒
- 无需复杂设置——只需在 Node-RED 中添加几个节点
- 兼容现有系统——可与您已有系统集成
非常适合: 多产品生产线、操作员控制面板、自动化系统,或任何需要快速切换配方的场景。
先决条件
开始前请确保:
- OV20i 摄像头已连接并正常工作
- 至少创建了 2 个可用配方
- 可访问 Node-RED(通过 IO Block)
您需要知道 配方 ID 号 ——编辑配方时可在浏览器地址栏中找到。
第 1 步:查找配方编号
1.1 获取配方 ID
- 打开任一配方,进入配方编辑器
- 查看浏览器地址栏
- 找到
/recipe/
后的数字(例如:/recipe/15
表示配方 ID 是 15) - 记录所有需要切换的配方 ID
为什么要用这些数字? 每个配方都有唯一且固定的 ID,摄像头内部使用此 ID 识别配方。
第 2 步:打开 Node-RED
2.1 访问流程构建器
- 在任一配方编辑器中,点击“IO Block”
- 点击“Configure IO”
现在进入 Node-RED,我们将在这里构建配方切换系统!
2.2 规划您的系统
我们要构建的流程如下:
按钮点击 → 格式化请求 → 发送给摄像头 → 查看结果
很简单! 摄像头内置了监听配方切换请求的 Web 服务器。
第 3 步:构建配方切换器
3.1 添加基础节点
将以下 4 个节点拖入画布:
- Inject(输入部分) - 您的“切换配方”按钮
- Function(功能部分) - 格式化请求
- HTTP Request(网络部分) - 发送命令给摄像头
- Debug(输出部分) - 显示执行结果
3.2 连接节点
按如下方式连接:
Inject → Function → HTTP Request → Debug
简单! 现在配置每个节点。
第 4 步:配置节点
4.1 设置配方按钮
- 双击 Inject 节点
- 名称改为“切换到配方 15”(替换为您的实际配方 ID)
- Payload 设置为 "15"(您的配方 ID)
- 点击“完成”
4.2 设置请求格式化器
- 双击 Function 节点
- 命名为“格式化请求”
- 复制以下代码:
// 从按钮获取配方号
let recipeID = msg.payload;
// 设置 Web 请求头
msg.headers = {'Content-Type': 'application/json'};
msg.payload = JSON.stringify({ id: recipeID });
return msg;
- 点击“完成”
作用说明: 将配方号打包成摄像头期望的格式。
4.3 设置 HTTP 请求
- 双击 HTTP Request 节点
- 方法设置为“POST”
- URL 设置为
localhost:5001/pipeline/activate
- 命名为“切换配方”
- 点击“完成”
18.92 版本之前:使用 http://[CAMERA_IP]/edge/pipeline/activate
18.92 及以后版本:使用 http://localhost:5001/pipeline/activate
4.4 设置响应监控
- 双击 Debug 节点
- 命名为“配方切换结果”
- 点击“完成”
完美! 您的配方切换器已准备好测试。
第 5 步:测试配方切换器
5.1 部署并尝试
- 点击红色“Deploy”按钮
- 点击您的 Inject 按钮(切换到配方 15)
- 观察 Debug 面板的响应
5.2 检查是否成功
成功标志:
- Debug 显示
"success": true
- 摄像头界面显示新配方名称
- Debug 面板无错误信息
成功时: 恭喜!您已远程切换配方。
失败时: 请查看下方故障排除部分。
5.3 添加更多配方按钮
需要多个配方? 只需添加更多 Inject 节点:
- 配方 10 按钮: Payload = "10",名称 = "切换到配方 10"
- 配方 23 按钮: Payload = "23",名称 = "切换到配方 23"
- 所有按钮连接到同一个 Function 节点
第 6 步:从其他设备使用
有趣的部分来了! 任何设备都可以通过发送网络请求来切换配方。
6.1 通过任意网页浏览器
在网络中任意浏览器输入:
http://192.168.0.100:5001/pipeline/activate
(请替换为您的摄像头 IP 地址)
6.2 通过命令行
Windows/Mac/Linux - 切换到配方 15:
curl -X POST http://192.168.0.100:5001/pipeline/activate \
-H "Content-Type: application/json" \
-d '{"id": "15"}'
6.3 通过 PLC 和其他系统
大多数现代系统支持发送 HTTP 请求:
- 西门子 PLC: 使用 HTTP 客户端块
- Allen-Bradley: 使用 HTTP 指令块
- Python/C#/Java: 使用标准 HTTP 库
- 自定义应用: 任何编程语言均可
请求格式始终相同:
- 方法: POST
- URL:
http://[CAMERA_IP]:5001/pipeline/activate
- 请求体:
{"id": "RECIPE_NUMBER"}
第 7 步:进一步优化
7.1 添加配方验证
防止切换到不存在的配方? 修改您的 Function 代码:
let recipeID = msg.payload;
let validRecipes = ["10", "15", "20"]; // 您的实际配方 ID
if (!validRecipes.includes(recipeID)) {
msg.payload = "无效配方: " + recipeID;
return null; // 不发送请求
}
// 继续正常格式化...
7.2 产品代码映射
想用产品名称代替数字? 试试这个:
let productCodes = {
"BOLT_A": "10",
"BOLT_B": "15",
"SCREW_C": "20"
};
let recipeID = productCodes[msg.payload];
// 继续格式化...
现在可以用产品名称触发切换了!
7.3 响应处理
想要更友好的成功/错误消息? 在 HTTP Request 后添加另一个 Function:
let response = JSON.parse(msg.payload);
if (response.success) {
msg.payload = "✓ 配方切换成功!";
} else {
msg.payload = "✗ 配方切换失败: " + response.error;
}
return msg;
第 8 步:快速故障排除
不工作?以下是常见解决方案:
问题 | 快速解决方法 |
---|---|
“配方未找到”错误 | 仔细核对 URL 中的配方 ID |
无任何响应 | 检查摄像头 IP 和网络连接 |
“解析错误”消息 | 确认 Function 节点代码复制正确 |
配方未实际切换 | 确认配方存在且未损坏 |
仍有问题? 确认摄像头在线且 Node-RED 可访问。
您成功了!
恭喜! 您已实现 OV20i 摄像头的远程配方控制。只需几次点击,您就构建了一个能:
- 即时切换配方,支持网络上任何设备
- 与现有系统集成,如 PLC、平板或计算机
- 支持多配方,通过简单按钮操作
- 验证请求,防止错误
- 兼容自定义应用,基于标准网络技术
下一步?
基础功能搭建完成后,您可以:
简单的后续步骤
- 为所有产品添加更多配方按钮
- 在不同设备上测试,如平板或手机
- 创建自定义产品映射,简化操作
高级思路
- 构建操作员仪表盘,带配方选择按钮
- 连接条码扫描器,实现自动配方选择
- 与 MES 系统集成,协调生产线
- 添加日志记录,跟踪配方使用情况
真实案例
以下是其他用户如何使用 HTTP 配方切换:
- 食品包装: 条码扫描器触发不同包装尺寸的配方切换
- 汽车行业: PLC 根据生产线零件类型切换配方
- 电子行业: 操作员平板带有不同电路板配方按钮
- 质量控制: 根据生产计划自动切换配方
可能性无限——一切都从您刚刚构建的简单系统开始!